package com.liuyfly.leetcode.questions;

import com.liuyfly.leetcode.util.LeetcodeUtil;

/**
 * @author liuyangfang at 2022-08-30 16:39
 */
public class Question0283 {
    /**
     * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。 请注意
     * ，必须在不复制数组的情况下原地对数组进行操作。<br/>
     * <br/>
     * 链接： https://leetcode.cn/problems/move-zeroes/
     */
    public static void moveZeroes(int[] nums) {
        int flag = nums.length - 1;
        for (int i = nums.length - 1; i >= 0; i--) {
            if (nums[flag] == 0) {
                flag--;
                continue;
            }
            if (nums[i] != 0) {
                continue;
            }
            exchange(nums, i, flag);
            flag--;
        }
    }

    private static void exchange(int[] nums, int start, int end) {
        int temp = nums[start];
        for (int i = start; i < end; i++) {
            nums[i] = nums[i + 1];
        }
        nums[end] = temp;
    }

    public static void main(String[] args) {
        int[] array = { 0, 0, 0, 0, 1, 3, 0, 9, 6, 0 };
        LeetcodeUtil.printArray(array);
        moveZeroes(array);
        LeetcodeUtil.printArray(array);
    }
}
